package com.muyu.cart.service;

import com.muyu.cart.domain.CartManager;
import com.muyu.cart.domain.req.*;
import com.muyu.cart.domain.resp.CartListResp;
import com.muyu.cart.domain.resp.CartStatusCheckResp;


import java.math.BigDecimal;
import java.util.List;

/**
 * 购物车服务接口
 *
 * @author JiaCheng
 * @version 1.0
 * @since 2025-09-21
 */
public interface CartService {



    /**
     * 添加商品到购物车
     *
     * @param req 添加请求参数
     */
    void addToCart(CartAddReq req);

    /**
     * 更新商品数量
     *
     * @param req 更新数量请求参数
     */
    void updateQuantity(CartUpdateQuantityReq req);

    /**
     * 勾选/取消购物车商品
     *
     * @param req 勾选操作请求参数
     */
    void toggleSelect(CartToggleSelectReq req);

    /**
     * 全选/全不选
     *
     * @param req 全选操作请求参数
     */
    void selectAll(CartSelectAllReq req);

    /**
     * 删除购物车商品
     *
     * @param cartIds 购物车ID列表
     */
    void deleteCartItems(List<Long> cartIds);

    /**
     * 清空购物车
     */
    void clearCart();

    /**
     * 获取购物车商品总数
     *
     * @return 商品总数
     */
    int getTotalCount();

    /**
     * 获取选中商品数量
     *
     * @return 选中商品数量
     */
    int getSelectedCount();

    /**
     * 获取选中商品总金额
     *
     * @return 选中商品总金额
     */
    BigDecimal getSelectedAmount();

    /**
     * 获取选中商品列表
     *
     * @return 选中商品列表
     */
    List<CartListResp> getSelectedItems();

    /**
     * 检查购物车商品状态
     *
     * @return 商品状态检查结果
     */
    List<CartStatusCheckResp> checkCartStatus();

    /**
     * 合并购物车
     *
     * @param cartItems 本地购物车商品列表
     */
    void mergeCart(List<CartManager> cartItems);

    List<CartListResp> selectCartListPage(CartListReq req);
}